{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.chdir(\"..\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from diffusers.pipelines import FluxPipeline\n",
    "from PIL import Image\n",
    "\n",
    "from omini.pipeline.flux_omini import Condition, generate, seed_everything"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "pipe = FluxPipeline.from_pretrained(\n",
    "    \"black-forest-labs/FLUX.1-schnell\", torch_dtype=torch.bfloat16\n",
    ")\n",
    "pipe = pipe.to(\"cuda\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pipe.unload_lora_weights()\n",
    "\n",
    "pipe.load_lora_weights(\n",
    "    \"Yuanshi/OminiControl\",\n",
    "    weight_name=f\"omini/subject_512.safetensors\",\n",
    "    adapter_name=\"subject\",\n",
    ")\n",
    "pipe.load_lora_weights(\"XLabs-AI/flux-RealismLora\", adapter_name=\"realism\")\n",
    "\n",
    "pipe.set_adapters([\"subject\", \"realism\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "image = Image.open(\"assets/penguin.jpg\").convert(\"RGB\").resize((512, 512))\n",
    "\n",
    "# For this model, the position_delta is (0, 32).\n",
    "# For more details of position_delta, please refer to:\n",
    "# https://github.com/Yuanshi9815/OminiControl/issues/89#issuecomment-2827080344\n",
    "condition = Condition(image, \"subject\", position_delta=(0, 32))\n",
    "\n",
    "prompt = \"On Christmas evening, on a crowded sidewalk, this item sits on the road, covered in snow and wearing a Christmas hat.\"\n",
    "\n",
    "\n",
    "seed_everything(0)\n",
    "\n",
    "result_img = generate(\n",
    "    pipe,\n",
    "    prompt=prompt,\n",
    "    conditions=[condition],\n",
    "    num_inference_steps=8,\n",
    "    height=512,\n",
    "    width=512,\n",
    "    main_adapter=\"realism\"\n",
    ").images[0]\n",
    "\n",
    "concat_image = Image.new(\"RGB\", (1024, 512))\n",
    "concat_image.paste(image, (0, 0))\n",
    "concat_image.paste(result_img, (512, 0))\n",
    "concat_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "image = Image.open(\"assets/tshirt.jpg\").convert(\"RGB\").resize((512, 512))\n",
    "\n",
    "condition = Condition(image, \"subject\", position_delta=(0, 32))\n",
    "\n",
    "prompt = \"On the beach, a lady sits under a beach umbrella. She's wearing this shirt and has a big smile on her face, with her surfboard hehind her. The sun is setting in the background. The sky is a beautiful shade of orange and purple.\"\n",
    "\n",
    "\n",
    "seed_everything()\n",
    "\n",
    "result_img = generate(\n",
    "    pipe,\n",
    "    prompt=prompt,\n",
    "    conditions=[condition],\n",
    "    num_inference_steps=8,\n",
    "    height=512,\n",
    "    width=512,\n",
    "    main_adapter=\"realism\"\n",
    ").images[0]\n",
    "\n",
    "concat_image = Image.new(\"RGB\", (1024, 512))\n",
    "concat_image.paste(condition.condition, (0, 0))\n",
    "concat_image.paste(result_img, (512, 0))\n",
    "concat_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "image = Image.open(\"assets/rc_car.jpg\").convert(\"RGB\").resize((512, 512))\n",
    "\n",
    "condition = Condition(image, \"subject\", position_delta=(0, 32))\n",
    "\n",
    "prompt = \"A film style shot. On the moon, this item drives across the moon surface. The background is that Earth looms large in the foreground.\"\n",
    "\n",
    "seed_everything()\n",
    "\n",
    "result_img = generate(\n",
    "    pipe,\n",
    "    prompt=prompt,\n",
    "    conditions=[condition],\n",
    "    num_inference_steps=8,\n",
    "    height=512,\n",
    "    width=512,\n",
    "    main_adapter=\"realism\"\n",
    ").images[0]\n",
    "\n",
    "concat_image = Image.new(\"RGB\", (1024, 512))\n",
    "concat_image.paste(condition.condition, (0, 0))\n",
    "concat_image.paste(result_img, (512, 0))\n",
    "concat_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "image = Image.open(\"assets/clock.jpg\").convert(\"RGB\").resize((512, 512))\n",
    "\n",
    "condition = Condition(image, \"subject\", position_delta=(0, 32))\n",
    "\n",
    "prompt = \"In a Bauhaus style room, this item is placed on a shiny glass table, with a vase of flowers next to it. In the afternoon sun, the shadows of the blinds are cast on the wall.\"\n",
    "\n",
    "seed_everything()\n",
    "\n",
    "result_img = generate(\n",
    "    pipe,\n",
    "    prompt=prompt,\n",
    "    conditions=[condition],\n",
    "    num_inference_steps=8,\n",
    "    height=512,\n",
    "    width=512,\n",
    "    main_adapter=\"realism\"\n",
    ").images[0]\n",
    "\n",
    "concat_image = Image.new(\"RGB\", (1024, 512))\n",
    "concat_image.paste(condition.condition, (0, 0))\n",
    "concat_image.paste(result_img, (512, 0))\n",
    "concat_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "image = Image.open(\"assets/oranges.jpg\").convert(\"RGB\").resize((512, 512))\n",
    "\n",
    "condition = Condition(image, \"subject\", position_delta=(0, 32))\n",
    "\n",
    "prompt = \"A very close up view of this item. It is placed on a wooden table. The background is a dark room, the TV is on, and the screen is showing a cooking show.\"\n",
    "\n",
    "seed_everything()\n",
    "\n",
    "result_img = generate(\n",
    "    pipe,\n",
    "    prompt=prompt,\n",
    "    conditions=[condition],\n",
    "    num_inference_steps=8,\n",
    "    height=512,\n",
    "    width=512,\n",
    "    main_adapter=\"realism\"\n",
    ").images[0]\n",
    "\n",
    "concat_image = Image.new(\"RGB\", (1024, 512))\n",
    "concat_image.paste(condition.condition, (0, 0))\n",
    "concat_image.paste(result_img, (512, 0))\n",
    "concat_image"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
